package com.ruoyi.order.domain;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 优惠券对象 ver_coupon
 * 
 * @author ruoyi
 * @date 2025-08-21
 */
@Data
public class VerCoupon extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 优惠券 ID（主键） */
    private Long id;

    private Long couponGroupId;

    @Excel(name = "使用的订单号", readConverterExp = "外=键，关联,o=rder,表=，未使用为,n=ull")
    private String useOrderId;

    private String code;

    /** 优惠券名称（如 “满 100 减 20”） */
    @Excel(name = "优惠券名称", readConverterExp = "如=,“=满,1=00,减=,2=0”")
    private String name;

    /** 类型（0 满减券，1 折扣券） */
    @Excel(name = "类型", readConverterExp = "0=,满=减券，1,折=扣券")
    private Long type;

    /** 优惠值（满减券为金额，折扣券为折扣率，如 0.8 表示 8 折） */
    @Excel(name = "优惠值", readConverterExp = "满=减券为金额，折扣券为折扣率，如,0=.8,表=示,8=,折=")
    private BigDecimal value;

    private Integer couponStock;

    /** 使用门槛（满多少可使用） */
    @Excel(name = "使用门槛", readConverterExp = "满=多少可使用")
    private BigDecimal minAmount;

    /** 有效期开始时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "有效期开始时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date startTime;

    /** 有效期结束时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "有效期结束时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date endTime;

    /** 状态（0 未使用，1 已使用，2 已过期） */
    @Excel(name = "状态", readConverterExp = "0=,未=使用，1,已=使用，2,已=过期")
    private Long status;

    /** 领取时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "领取时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date getTime;

    private String remark;

    private LocalDateTime deleteTime;

    private Integer isDelete; // 0否，1是

    @Override
    public String toString() {
        return "VerCoupon{" +
                "id=" + id +
                ", couponGroupId=" + couponGroupId +
                ", useOrderId='" + useOrderId + '\'' +
                ", code='" + code + '\'' +
                ", name='" + name + '\'' +
                ", type=" + type +
                ", value=" + value +
                ", couponStock=" + couponStock +
                ", minAmount=" + minAmount +
                ", startTime=" + startTime +
                ", endTime=" + endTime +
                ", status=" + status +
                ", getTime=" + getTime +
                ", remark='" + remark + '\'' +
                ", deleteTime=" + deleteTime +
                ", isDelete=" + isDelete +
                '}';
    }
}
